%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Archivo: montecarlo.m
% Funcion que ejecuta varias veces la simulacion, y computa el tiempo medio de
% un cliente en el sistema mediante montecarlo.  Retorna el tiempo medio del 
% cliente en el sistema.

function mean_time = montecarlo(p, max_time)
	
	rand('seed', 123456);
	cota = 0.005;
	alpha = 0.01;

	[tiempos(1) xx] = simulate(p, max_time);
	medias(1) = tiempos(1);
	varianzas(1) = 0;
	i = 2;

	while (i <= 3000 || abs(varianzas(i-1) - varianzas(i-2)) > cota ||
			abs(varianzas(i-1) - varianzas(i-3)) > cota ||
		    	abs(varianzas(i-1) - varianzas(i-4)) > cota)
		[tiempos(i) xx] = simulate(p, max_time);
		medias(i) = (medias(i-1) * (i-1) + tiempos(i)) / i;
		varianzas(i) = var(medias);
		i++;
	end
	
	i--;
	mean_time = medias(i);
	varianza = var(tiempos);
	intervalo = normal_inv(1-alpha/2)* sqrt(varianza/i);  
	fprintf(stdout, 'p = %g, media = %g, ', p, media);
	fprintf(stdout, 'varianza = %g, iteraciones = %g,', varianza, i);
	fprintf(stdout, 'intervalo = %g\n', intervalo);
	fflush(stdout);
end
